#ifndef _SHA1_H_
#define _SHA1_H_
#include <stdint.h>

/*sha1 crypto */
/*
    SHA1是其中比较常见的一种摘要算法，它的特点就是计算复杂度较低，不等长的数据原文输入，可以得出等长的摘要值，
    这个值是固定为 20 字节。正是由于这种特殊性，很多重要的数据完整性校验领域，
    都可以看到SHA1的影子
*/
#define DIGEST_IS_STRING 1
#if !(DIGEST_IS_STRING)
#define SHA1_DIGEST_LEN 20              // SHA1 outputs a 20 byte digest
#else   /* DIGEST_IS_STRING */
#define SHA1_DIGEST_LEN (20*2 + 1)      // SHA1 outputs a 20*2+1 byte digest for string
#endif  /* DIGEST_IS_STRING */

typedef struct _sha1_ctx_t {
    uint32_t 		total[2];     	/*!< number of bytes processed  */
    uint32_t 		state[5];   	/*!< intermediate digest state  */
    uint8_t 		buffer[64];   	/*!< data block being processed */
} sha1_ctx_t;

void crypto_sha1_init(sha1_ctx_t *ctx);
void crypto_sha1_update(sha1_ctx_t *ctx, const uint8_t *data, uint32_t len);
void crypto_sha1_final(sha1_ctx_t *ctx, uint8_t *digest);

#endif  /* _SHA1_H_ */
